package cn.inno.exceptions;

import cn.inno.entitys.ErrorMsg;
import net.sf.json.JSONObject;

/**
 * 业务异常
 */
public class BusinessException extends RuntimeException {
    private ErrorMsg errorMsg;

    public BusinessException() {
        super();
    }

    public BusinessException(String message) {
        super(message);
    }

    public BusinessException(String code, String message) {
        super(message);
        this.errorMsg = new ErrorMsg(code, message);
    }

    public BusinessException(ErrorMsg errorMsg) {
        super(errorMsg == null ? null : errorMsg.getMessage());
        this.errorMsg = errorMsg;
    }

    public BusinessException(ErrorMsg errorMsg, String message) {
        super(message);
        this.errorMsg = errorMsg;
    }

    public BusinessException(ErrorMsg errorMsg, Throwable cause) {
        super(errorMsg == null ? null : errorMsg.getMessage(), cause);
        this.errorMsg = errorMsg;
    }

    public BusinessException(String message, Throwable cause) {
        super(message, cause);
    }

    public BusinessException(Throwable cause) {
        super(cause);
    }

    public ErrorMsg getErrorMsg() {
        String msg = this.getMessage();
        if (this.errorMsg == null || this.errorMsg.getCode() == null) {
            return new ErrorMsg(msg);
        } else {
            return new ErrorMsg(this.errorMsg.getCode(), msg);
        }
    }

    public JSONObject getErrorJsonMsg() {
        JSONObject jsonObject = new JSONObject();
        if (this.errorMsg != null && this.errorMsg.getCode() != null) {
            jsonObject.put(ErrorMsg.KEY_CODE, this.errorMsg.getCode());
            jsonObject.put(ErrorMsg.KEY_MESSAGE, this.errorMsg.getMessage());
        }
        return jsonObject;
    }

    @Override
    public String getMessage() {
        if (this.errorMsg == null || this.errorMsg.getMessage() == null) {
            return super.getMessage();
        }
        return this.errorMsg.getMessage();
    }

    public void setErrorMsg(ErrorMsg errorMsg) {
        this.errorMsg = errorMsg;
    }
}